#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;
typedef long long LL;
const int N = 55, mod = 1e9 + 7;
int f[N][N], ne[N];
char str[N];
int n, m;

int main()
{
    // 先进行kmp求next数组
    cin >> n >> (str + 1);
    m = strlen(str + 1);
    for (int i = 2, j = 0; i <= m; ++i)
    {
        while (j && str[j + 1] != str[i])
            j = ne[j];
        // 如果最后一个数相等，就需要++
        if (str[j + 1] == str[i])
            ++j;
        ne[i] = j;
    }
    // 长度为0, 并且最后一位数状态为0的可能数量是1
    f[0][0] = 1;
    LL res = 0;
    // 这里的j是在枚举第i层的各种情况，通过遍历第i个数26个可能和前i个字母的所有情况，得到第i个字母
    // 在填当前字母后的方案是什么
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < min(i + 1, m); ++j)
            for (char a = 'a'; a <= 'z'; ++a)
            {
                // 长度为i+1的数量是由长度是i的状态可能数量转移而来的
                int u = j;
                while (u && a != str[u + 1])
                    u = ne[u];
                if (a == str[u + 1])
                    u++;
                if (u < m)
                    f[i + 1][u] = (f[i + 1][u] + f[i][j]) % mod;
            }
    for (int i = 0; i < m; ++i)
        res = (res + f[n][i]) % mod;
    cout << res << endl;
    return 0;
}
